#pragma once

#include "sfc/core/mod.h"

namespace sfc::ops {

template <usize... I>
struct idx_t {};

template <usize I>
struct idx_t<I> {
  static constexpr const auto VALUE = I;
};

namespace detail {
template <class T, T... I>
struct SeqHelper {
  using Type = idx_t<I...>;
};
}  // namespace detail

#if __has_builtin(__integer_pack)
template <usize N>
using seq_t = idx_t<__integer_pack(N)...>;
#else
template <usize N>
using seq_t = typename __make_integer_seq<detail::SeqHelper, usize, N>::Type;
#endif

}  // namespace sfc::ops
